package org.dxy.domain.event.equipment;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Value;
import org.dxy.domain.event.AggregateTypeEnum;
import org.dxy.domain.event.DomainEvent;

import java.time.LocalDateTime;

/**
 * 任务因故障被重新分配事件
 * 某任务由于设备故障被重新分配到其他设备。
 * @author dxy
 * @createTime 2025/6/15 14:46
 */
@Value
@Builder
@AllArgsConstructor
public class TaskReassignedDueToFailureEvent implements DomainEvent {
    /**
     * 工单 ID
     */
    Long workOrderId;

    /**
     * 工艺步骤 ID
     */
    Long processStepId;

    /**
     * 原设备 ID（发生故障的）
     */
    Long originalEquipmentId;

    /**
     * 新分配设备 ID
     */
    Long newEquipmentId;

    /**
     * 重分配时间
     */
    @Builder.Default
    LocalDateTime reassignedTime = LocalDateTime.now();

    /**
     * 重分配原因说明（可选）
     */
    String reason;
    
    @Override
    public Long aggregateId() {
        return originalEquipmentId;
    }
    
    @Override
    public String aggregateType() {
        return AggregateTypeEnum.EQUIPMENT.getKey();
    }
    
    @Override
    public String eventType() {
        return EquipmentEventTypeEnum.TASK_REASSIGNED.getKey();
    }
}